home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / comm / misc / mirrorman_1_10b1.lha / MirrorManager-1.10b1 / rexx / Configure.rexx < prev    next >
OS/2 REXX Batch file  |  1994-06-24  |  5KB  |  208 lines

  1. /*
  2. **  $VER: $Id: Configure.rexx,v 1.5 1994/04/26 23:36:22 tf Exp $
  3. **
  4. **  Initial revision by Tobias Ferber, 17.4.94
  5. **
  6. **  This script replaces the lines between the first two DELIMITER comments in a
  7. **  MirrorManager configuration script by the contents of a given file.
  8. */
  9.  
  10. OPTIONS FAILAT 10
  11.  
  12. /**/
  13.  
  14. scriptfile   = ""
  15. insertfile   = ""
  16. tempfile     = "T:ConfigureTemp." || pragma('Id')
  17. template     = "READ/S,SCRIPT/K/A,WITH/K,DELIMITER/K,TERMINATOR/K,RESET/S"
  18. delimiter    = "/*@*/"
  19. terminator   = "/* END */"
  20. args         = ""
  21. cliopts      = ""
  22.  
  23. /* parse args */
  24.  
  25. IF ( ARG() < 1 ) | ( (ARG() = 1) & (ARG(1)='?') ) THEN DO
  26.   OPTIONS PROMPT template': '
  27.   PARSE PULL args
  28.   END
  29. ELSE DO n=1 FOR ARG() /* RXFB_TOKEN for RX ?! */
  30.   args= args || ARG(n)
  31.   END
  32.  
  33. DO WHILE WORDS(args) > 0
  34.   av= next_arg()
  35.   SELECT
  36.     WHEN UPPER(av) = "SCRIPT" THEN DO
  37.       IF WORDS(args) > 0 THEN DO
  38.         scriptfile= next_arg()
  39.         END
  40.       ELSE EXIT bad_args("Missing filename after SCRIPT keyword")
  41.       end /* SCRIPT */
  42.  
  43.     WHEN UPPER(av) = "WITH" THEN DO
  44.       IF WORDS(args) > 0 THEN DO
  45.         insertfile= next_arg()
  46.         END
  47.       ELSE EXIT bad_args("Missing filename after WITH keyword")
  48.       end /* WITH */
  49.  
  50.     WHEN UPPER(av) = "DELIMITER" THEN DO
  51.       IF WORDS(args) > 0 THEN DO
  52.         delimiter= next_arg()
  53.         END
  54.       ELSE EXIT bad_args("Missing delimiter string after DELIMITER keyword")
  55.       end /* DELIMITER */
  56.  
  57.     WHEN UPPER(av) = "TERMINATOR" THEN DO
  58.       IF WORDS(args) > 0 THEN DO
  59.         terminator= next_arg()
  60.         END
  61.       ELSE EXIT bad_args("Missing terminator string after TERMINATOR keyword")
  62.       end /* TERMINATOR */
  63.  
  64.     WHEN UPPER(av) = "READ"  THEN cliopts= cliopts || 'r'
  65.     WHEN UPPER(av) = "RESET" THEN cliopts= cliopts || 'c'
  66.  
  67.     OTHERWISE DO
  68.       IF av ~= '?' THEN EXIT bad_args("Unknown keyword" av)
  69.                    ELSE EXIT bad_args("")
  70.       END
  71.  
  72.     END /* SELECT */
  73.  
  74.   END /* DO */
  75.  
  76. /**/
  77.  
  78. CALL PRAGMA('W','N')
  79.  
  80. IF WORDS(scriptfile) < 1 THEN EXIT bad_args("Missing SCRIPT filename")
  81.  
  82. IF ~EXISTS(scriptfile) THEN DO
  83.   SAY 'Failed to locate your TO file "'scriptfile'"'
  84.   EXIT 10
  85.   END
  86.  
  87. IF POS('r',cliopts) < 1 THEN DO
  88.   IF WORDS(insertfile) < 1 THEN EXIT bad_args("Missing WITH filename")
  89.  
  90.   IF ~EXISTS(insertfile) THEN DO
  91.     SAY 'Failed to locate your FROM file "'insertfile'"'
  92.     EXIT 10
  93.     END
  94.   END
  95.  
  96. /**/
  97.  
  98. IF OPEN('out',tempfile,'W') THEN DO
  99.   IF OPEN('in',scriptfile,'R') THEN DO
  100.     line= ""
  101.     DO WHILE (line ~= delimiter) &~ EOF('in')
  102.       line= STRIP( READLN('in') )
  103.       CALL WRITELN('out',line)
  104.       END
  105.  
  106.     IF line ~= delimiter THEN EXIT buythefarm('Parse Error 1 in "'scriptfile'"')
  107.  
  108.     IF POS('r',cliopts) > 0 THEN DO
  109.       line= ""
  110.       DO WHILE (line ~= delimiter) &~ EOF('in')
  111.         line= STRIP( READLN('in') )
  112.  
  113.         IF (line ~= delimiter) THEN DO
  114.           IF (LEFT(line,1) = '(') & (RIGHT(line,1) = ')') THEN DO  /* Installer script */
  115.             PARSE VAR line '(set' var val ')' .
  116.             IF POS('c',cliopts) > 0 THEN SAY '(set' LEFT(STRIP(var),20) '"")'
  117.                                     ELSE SAY LEFT(STRIP(var),20) '=' val
  118.             END
  119.           ELSE IF POS('=',line) > 0 THEN DO  /* ARexx script */
  120.             PARSE VAR line lhs '=' rhs
  121.             IF POS('c',cliopts) > 0 THEN SAY LEFT(strip(lhs),20) '= ""'
  122.                                     ELSE SAY '(set' lhs rhs')'
  123.             END
  124.           /*ELSE EXIT buythefarm('Parse Error 2 in "'scriptfile'"')*/
  125.           END
  126.         END
  127.  
  128.       IF line ~= delimiter THEN EXIT buythefarm('Parse Error 3 in "'scriptfile'"')
  129.  
  130.       END
  131.  
  132.     ELSE DO /* POS('r',cliopts) < 1 */
  133.  
  134.       IF OPEN('fp',insertfile,'R') THEN DO
  135.         DO UNTIL EOF('fp')
  136.           line= STRIP( READLN('fp') )
  137.           /*IF WORDS(line) > 0 THEN*/ CALL WRITELN('out',line)
  138.           END
  139.         CALL CLOSE('fp')
  140.         END
  141.       ELSE EXIT buythefarm('Failed to open' insertfile)
  142.  
  143.       CALL WRITELN('out',delimiter)
  144.  
  145.       line= ""
  146.       DO WHILE (line ~= delimiter) &~ EOF('in')
  147.         line= STRIP( READLN('in') )
  148.         END
  149.  
  150.       IF line ~= delimiter THEN EXIT buythefarm('Parse Error 4 in "'scriptfile'"')
  151.  
  152.       line= ""
  153.       DO WHILE (line ~= terminator) &~ EOF('in')
  154.         line= READLN('in')
  155.         CALL WRITELN('out',line)
  156.         END
  157.  
  158.       END /* POS('r',cliopts) < 1 */
  159.  
  160.     CALL CLOSE('in')
  161.     END
  162.  
  163.   ELSE EXIT buythefarm('Could not read from "'scriptfile'"')
  164.  
  165.   CALL CLOSE('out')
  166.   END
  167.  
  168. ELSE EXIT buythefarm('Could not write to "'tempfile'"')
  169.  
  170. IF POS('r',cliopts) < 1 THEN
  171.   ADDRESS COMMAND 'Copy FROM "'tempfile'" TO "'scriptfile'"'
  172.  
  173. IF EXISTS(tempfile) THEN
  174.   ADDRESS COMMAND 'Delete QUIET FILE "'tempfile'"'
  175.  
  176. EXIT
  177.  
  178.  
  179. /**/
  180.  
  181. bad_args: PROCEDURE EXPOSE template
  182.   PARSE ARG str
  183.   IF WORDS(str) > 0 THEN SAY str
  184.   SAY "Template:" template
  185.   RETURN 10
  186.  
  187. /**/
  188.  
  189. buythefarm: PROCEDURE EXPOSE tempfile
  190.   PARSE ARG str
  191.   IF WORDS(str) > 0 THEN SAY str
  192.  
  193.   CALL CLOSE('fp')
  194.   CALL CLOSE('in')
  195.   CALL CLOSE('out')
  196.  
  197.   IF EXISTS(tempfile) THEN ADDRESS COMMAND 'Delete QUIET' '"'tempfile'"'
  198.   RETURN 10
  199.  
  200.  
  201. /* get the next command-line argument from global 'args' string */
  202.  
  203. next_arg: PROCEDURE EXPOSE args
  204.   args= STRIP(args)
  205.   IF LEFT(args,1) = '"' THEN PARSE VAR args '"' a '"' args
  206.                         ELSE PARSE VAR args     a     args
  207.   RETURN STRIP(a,'b','"')
  208.